#!/bin/bash

#  ********************************************************
#  * Author        : Jason Peng
#  * Description   : Hadoop集群环境一键安装脚本
#  * Date          : 2019-04-20
#  * ******************************************************

echo
echo "****************************"
echo -e "\033[42;37m**欢迎使用Hadoop一键安装脚本**\033[0m"
echo "****************************"
echo -e "\033[47;30m 1.安装主节点 \033[0m"
echo -e "\033[47;30m 2.添加新的节点 \033[0m"
echo -e "\033[47;30m 3.退出 \033[0m"
echo "****************************"
echo

function install(){
    # 上传Hadoop
    rz -y

    # 解压文件
    tar -zxvf "$PWD"/"$(ls -t hadoop*.tar.gz | sed -n 1p)" -C /usr/apps/


    # 配置JAVA_HOME
    sed -i "s/export JAVA_HOME=.*/export JAVA_HOME="$JAVA_HOME"/g" /usr/apps/hadoop*/etc/hadoop/hadoop-env.sh

    # 配置hdfs-site.xml
    read -p "请输入备用的主机名称：" spare

sed -i "/<configuration>/a\
<property>\
<name>dfs.namenode.rpc-address</name>\
<value>"$hostname":9000</value>\
</property>\
\
<property>\
<name>dfs.namenode.name.dir</name>\
<value>/opt/hdpdata/name/</value>\
</property>\
\
<property>\
<name>dfs.datanode.data.dir</name>\
<value>/opt/hdpdata/data/</value>\
</property>\
\
<property>\
<name>dfs.namenode.secondary.http-address</name>\
<value>"$spare":50090</value>\
</property>\
" /usr/apps/hadoop*/etc/hadoop/hdfs-site.xml

    # 格式化namenode
    /usr/apps/hadoop*/bin/hadoop namenode -format

    # 配置环境变量
    cd /usr/apps/hadoop*

    cat >> /etc/profile << EOF
export  HADOOP_HOME=$PWD
export  PATH=\$PATH:\$JAVA_HOME/bin:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
EOF

    # 启动namenode
    cd /usr/apps/hadoop*/sbin
    source hadoop-daemon.sh start namenode

    # 启动datanode
    source hadoop-daemon.sh start datanode
}

# 添加新的节点
function next_node(){
    read -p "请输入要添加的节点的hostname名称: " next_hostname
    ssh $next_hostname "[ -d /usr/apps ] && mkdir -p /usr/apps"

    # 复制hadoop到新的节点
    scp -r /usr/apps/hadoop* $next_hostname:$PWD

    # 启动datanode
    ssh $next_hostname > /dev/null 2>&1 << eeooff
cd /usr/apps/hadoop*/sbin
source hadoop-daemon.sh start datanode
eeooff
}

function main(){
    while true
    do
        read -p "请输入操作序号: " no
        if [ $no == "1" ]; then
            install
            echo "1"
        elif [ $no == "2" ]; then
            next_node
        elif [ $no == "3" ]; then
            return 0
        else
            echo
            echo "您输入的序号有误..."
            echo
        fi
    done
}

main
